﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Web.Models;
using Web.Repositories;

namespace Web.Controllers
{
    public class AdminController : Controller
    {
        CategoriaRepository categoriaRepository = new CategoriaRepository();
        HabitacionRepository habitacionRepository = new HabitacionRepository();
        ReservaRepository reservaRepository = new ReservaRepository();
        //
        // GET: /Admin/
        [Authorize]
        [ValidateInput(false)]
        public ActionResult VerCategorias()
        {
            string nombre = Request["txtBusqueda"];
            if (!(nombre == string.Empty || nombre == null))
            {
                ViewBag.Categorias = categoriaRepository.Buscar(nombre);
            }
            else
            {
                ViewBag.Categorias = categoriaRepository.GetAll();
            }
            return View();
        }

        [Authorize]
        public ActionResult VerHabitaciones()
        {
            ViewBag.Habitaciones = habitacionRepository.GetAll();
            return View();
        }

        [Authorize]
        public ActionResult VerReservas()
        {
            ViewBag.HasError = false;
            ViewBag.Filtro = false;
            if (Request.HttpMethod == "POST")
            {
                if (!(Request["datFecha"] == string.Empty))
                {
                    var fecha = DateTime.Parse(Request["datFecha"]);
                    ViewBag.Filtro = true;
                    ViewBag.Reservas = reservaRepository.getReservasPorFecha(fecha);
                    if (ViewBag.Reservas.Count == 0)
                    {
                        ViewBag.HasError = true;
                        ViewBag.Error = "No se encontraron reservas para esa fecha";
                    }
                }
                else 
                {
                    ViewBag.Reservas = reservaRepository.GetAll();
                    ViewBag.HasError = ViewBag.Reservas.Count == 0;
                    ViewBag.Error = "No hay ninguna reserva";
                }
            }
            else
            {
                ViewBag.Reservas = reservaRepository.GetAll();
                ViewBag.HasError = ViewBag.Reservas.Count == 0;
                ViewBag.Error = "No hay ninguna reserva";
            }
            return View();
        }

        [Authorize]
        public ActionResult ReservasPorMes()
        {
            ViewBag.Filtro = false;
            if (Request.HttpMethod == "POST")
            {
                ViewBag.Filtro = true;
                int ano = int.Parse(Request["selAno"]);
                int mes = int.Parse(Request["selMes"]);
                
                ViewBag.Ano = ano;

                List<Reserva> Reservas = reservaRepository.GetReservaPorAnoMes(ano, mes);
                int diasPorMes = DateTime.DaysInMonth(ano, mes);
                int cantHabitaciones = habitacionRepository.GetAll().Count;

                double diasDisponibles = diasPorMes * cantHabitaciones;
                double diasOcupados = 0;

                foreach (var reserva in Reservas)
                {
                    diasOcupados += (reserva.FechaEgreso - reserva.FechaIngreso).TotalDays;
                }

                ViewBag.Mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes);
                ViewBag.Reservas = Reservas;

                double ocupacionPromedio = (diasOcupados * 100) / diasDisponibles;
                ViewBag.OcupacionPromedio = Math.Round(ocupacionPromedio, 2);
            }
            return View();
        }
    }
}
